﻿/*
Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
CKEDITOR.dialog.add('button', function (editor) {
    function commitAttributes(element) {
        var val = this.getValue();
        if (val) {
            element.attributes[this.id] = val;
            if (this.id == 'name')
                element.attributes['data-cke-saved-name'] = val;
        }
        else {
            delete element.attributes[this.id];
            if (this.id == 'name')
                delete element.attributes['data-cke-saved-name'];
        }
    }

    return {
        title: editor.lang.button.title,
        minWidth: 350,
        minHeight: 150,
        onShow: function () {
            delete this.button;
            var element = this.getParentEditor().getSelection().getSelectedElement();
            if (element && element.is('input')) {
                var type = element.getAttribute('type');
                if (type in { button: 1, reset: 1, submit: 1 }) {
                    this.button = element;
                    this.setupContent(element);
                }
            }
        },
        onOk: function () {
            var editor = this.getParentEditor(),
				element = this.button,
				isInsertMode = !element;

            var fake = element ? CKEDITOR.htmlParser.fragment.fromHtml(element.getOuterHtml()).children[0]
					: new CKEDITOR.htmlParser.element('input');
            this.commitContent(fake);

            var writer = new CKEDITOR.htmlParser.basicWriter();
            fake.writeHtml(writer);
            var newElement = CKEDITOR.dom.element.createFromHtml(writer.getHtml(), editor.document);

            if (isInsertMode)
                editor.insertElement(newElement);
            else {
                newElement.replace(element);
                editor.getSelection().selectElement(newElement);
            }
        },
        contents: [
			{
			    id: 'info',
			    label: editor.lang.button.title,
			    title: editor.lang.button.title,
			    elements: [
					{
					    id: 'name',
					    type: 'text',
					    label: editor.lang.common.name,
					    'default': '',
					    setup: function (element) {
					        this.setValue(
									element.data('cke-saved-name') ||
									element.getAttribute('name') ||
									'');
					    },
					    commit: commitAttributes
					},
					{
					    id: 'value',
					    type: 'text',
					    label: editor.lang.button.text,
					    accessKey: 'V',
					    'default': '',
					    setup: function (element) {
					        this.setValue(element.getAttribute('value') || '');
					    },
					    commit: commitAttributes
					},
					{
					    id: 'type',
					    type: 'select',
					    label: editor.lang.button.type,
					    'default': 'button',
					    accessKey: 'T',
					    items:
						[
							[editor.lang.button.typeBtn, 'button'],
							[editor.lang.button.typeSbm, 'submit'],
							[editor.lang.button.typeRst, 'reset']
						],
					    setup: function (element) {
					        this.setValue(element.getAttribute('type') || '');
					    },
					    commit: commitAttributes
					}
				]
			}
		]
    };
});
